package com.sailfish.springbootdemo.service.db1;

import com.sailfish.springbootdemo.pojo.Result;
import com.sailfish.springbootdemo.pojo.db1.PcbaLine;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

public interface PcbaLineService {

    /**
     * 查询所有
     *
     * @return
     */
    Result getAllPcbaLine(String searchPcbaLineName, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId, Integer status, Integer paramsStatusDeclare, Integer paramsStatusActual, Integer paramsStatusBase, Integer page, Integer pageSize);

    /**
     * 查询所有 参与基线整线能力的线体
     *
     * @return
     */
    Result getAllPcbaLineForBaseLineCapacity(String searchPcbaLineName, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId);

    /**
     * 查询所有 参与工艺整线能力的线体
     *
     * @return
     */
    Result getAllPcbaLineForTechLineCapacity(String searchPcbaLineName, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId);

    /**
     * 查询车间下smt线体
     *
     * @param pcbaCompanyId
     * @param pcbaWorkshopId
     * @return
     */
    Result getAllSmtLineByCompanyAndWorkshop(Integer pcbaCompanyId, Integer pcbaWorkshopId);

    /**
     * 查询所有 有设备需要审核工艺实际能力的 线体
     *
     * @return
     */
    Result getAllPcbaLineWithAuditDevice(String searchPcbaLineName, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId, Integer status, Integer paramsStatus);

    /**
     * 查询所有[复选框条件]
     *
     * @return
     */
    Result getAllPcbaLineView(String data);

    /**
     * 删除
     *
     * @param pcbaLineId
     * @return
     */
    Result deleteById(Integer pcbaLineId);

    /**
     * 新增或者更新
     *
     * @param data
     * @return
     */
    Result addOrUpdatePcbaLine(String data);

    /**
     * 新增设备资源
     *
     * @param data
     * @return
     */
    Result addPcbaDeviceResourceOfLine(String data);

    /**
     * 根据id查询
     *
     * @param pcbaLineId
     * @return
     */
    PcbaLine getPcbaLineById(Integer pcbaLineId);

    /**
     * 判断是否已存在改名字的线体并构造数组
     *
     * @return
     */
    Result judgeLineNameIsExist(Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId);

    /**
     * 根据工序生成工序名列表
     *
     * @return
     */
    Result createLineListByProcess(Integer pcbaProcessId);

    /**
     * 根据多个工序生成工序名列表
     *
     * @return
     */
    Result createLineListByProcesses(String pcbaProcessIds);

    /**
     * 更新线体等级
     *
     * @param pcbaLineLevel
     * @param pcbaLineId
     * @return
     */
    Result updateLineLevel(Integer pcbaLineLevel, Integer pcbaLineId);

    /**
     * 更新线体备注
     *
     * @param notes
     * @param pcbaLineId
     * @return
     */
    Result updateLineNotes(String notes, Integer pcbaLineId);

    /**
     * 导出基线能力表格
     *
     * @param pcbaLineIds
     * @return
     */
    Result exportBaseCapacityExcel(String pcbaLineIds);

    /**
     * 导出基线能力表格V2
     *
     * @param pcbaLineIds
     * @return
     */
    Result exportBaseCapacityExcelV2(String pcbaLineIds);

    /**
     * 导出基线能力表格V3[进一步优化，只关注规则里面配置的值进行填充]
     *
     * @param pcbaLineIds
     * @return
     */
    Result exportBaseCapacityExcelV3(String pcbaLineIds);

    /**
     * 导出工艺能力表格
     *
     * @param pcbaLineIds
     * @return
     */
    Result exportTechCapacityExcel(String pcbaLineIds);

    /**
     * 导出线体清单
     *
     * @param searchPcbaLineName
     * @param pcbaCompanyId
     * @param pcbaWorkshopId
     * @param pcbaProcessId
     * @return
     */
    Result exportLineExcel(String searchPcbaLineName, Integer pcbaCompanyId, Integer pcbaWorkshopId, Integer pcbaProcessId);

    /**
     * type:1  根据选中的id导出    type:2 导出所有
     *
     * @param type
     * @return
     */
    Result exportLineExcelByType(Integer type, String pcbaLineIds);

    /**
     * 审核工艺宣称能力
     *
     * @param paramsNotesDeclare
     * @param pcbaLineId
     * @param paramsStatusDeclare
     * @return
     */
    Result auditPcbaLineTechDeclare(String paramsNotesDeclare, Integer pcbaLineId, Integer paramsStatusDeclare);

    /**
     * 审核工艺实际能力
     *
     * @param paramsNotesActual
     * @param pcbaLineId
     * @param paramsStatusActual
     * @return
     */
    Result auditPcbaLineTechActual(String paramsNotesActual, Integer pcbaLineId, Integer paramsStatusActual);

    /**
     * 复制线体
     *
     * @param pcbaLineIds
     * @return
     */
    Result copyLine(String pcbaLineIds);

    /**
     * 根据工厂查询参与投产的smt线体
     *
     * @param pcbaCompanyId
     * @return
     */
    Result getAllSmtLineForPcbaByCompany(Integer pcbaCompanyId);

    /**
     * 修改审核结果
     */
    Result auditPcbaLineParamBase(Integer pcbaLineId, Integer paramsStatusBase, String paramsRemarkBase);

    /**
     * 获取所有含有需要年限闭环处理设备的 高端线体 列表
     */
    Result getAllNeedToLoopCloseLine(String data);

    /**
     * 根据多个pcbaLineIds字符串导出线体和设备工艺能力excel
     * type: 1   导出全部   type: 2   导出选中
     * operateType:  "for_admin"    "for_user"
     */
    Result exportPcbaLineAndDeviceParamsExcel(String pcbaLineIds, Integer type, String operateType);

    /**
     * excel导入线体和设备工艺能力参数
     */
    Result importPcbaLineAndDeviceParamsExcel(MultipartFile file);

    /**
     * 如果线体非smt线体，则根据 下面的设备状态自动修改线体状态
     */
    Result updateLineStatusByDevicesStatus(Integer pcbaLineId);

    /**
     * 获取所有含有年限预警的设备的线体列表
     */
    Result getAllNeedToAgeCloseLine(String data);

    /**
     * 获取所有含有需要年限闭环处理设备的 高端线体 列表[含有待审核的]
     */
    Result getAllNeedToLoopCloseLineWaitAudit(String data);

    /**
     * 获取所有含有年限预警的设备的线体列表[含有待审核的]
     */
    Result getAllNeedToAgeCloseLineWaitAudit(String data);

}
